import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba
# 中文字体设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 12  # 字体大小可调节

# 设置配色
palette = {
    '一般价值客户': '#ECA8A9',
    '高价值客户': '#CFAFD4',
    '低价值客户': '#D3E2B7'
}

# 读取数据
df = pd.read_excel('销售统计.xls')
df['客户类型'] = df['客户类型'].replace({
    'normal': '一般价值客户',
    'high': '高价值客户',
    'low': '低价值客户'
})

# 创建图
g = sns.pairplot(df,
                 hue="客户类型",
                 palette=palette,
                 plot_kws={'alpha': 1, 's': 70, 'edgecolor': 'black',"linewidth": 0.5},
                 diag_kind='kde',
                 height=2.8)

# 设置每个子图背景色、网格、边框
for ax in g.axes.flatten():
    if ax is not None:
        transparent_color = to_rgba('#c3d1ee', alpha=0.3)
        ax.set_facecolor(transparent_color)
        # ax.set_facecolor('#ebf0fa')  # 设置淡蓝色背景
        ax.spines['bottom'].set_visible(False)
        ax.spines['left'].set_visible(False)
        ax.tick_params(bottom=False, left=False)

        ax.grid(True, linestyle='-', linewidth=1.2, color='#f8f8f8', alpha=0.9)  # 显示浅灰色网格线
        for spine in ax.spines.values():
            spine.set_color("#ebf0fa")
            spine.set_linewidth(1)


# 设置图例标题
g._legend.set_title("客户类型")

# 设置主图背景为白
g.fig.patch.set_facecolor('white')

# 保存图像
plt.savefig('pairplot_带网格线灰背景.png', dpi=300, bbox_inches='tight')# 保存图像
plt.savefig('pairplot_带网格线灰背景.png', dpi=300, bbox_inches='tight')
plt.show()
